package com.ydl.learning.scala

/**
  * 传名参数
  * 传名参数 仅在被使用时触发实际参数的求值运算。 也就是懒加载的
  * 要将一个参数变为传名参数，只需在它的类型前加上 =>
  *
  * @author ydl
  * @since 2021/3/19
  */
class ByNameParameters {

  def calculate(input: => Int) = input * 37


  def whileLoop(condition: => Boolean)(body: => Unit): Unit =
    if (condition) {
      body
      whileLoop(condition)(body)
    }

  var i = 2

  whileLoop(i > 0) {
    println(i)
    //此处是作为传名参数传给whileLoop方法的，所以在whileLoop方法执行前，i -= 1不会执行
    i -= 1
  } // prints 2 1

}
